package co.gov.medellin.ssti.sub.service;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.NamingException;

import co.gov.medellin.ssti.sub.common.ConexionFactory;
import co.gov.medellin.ssti.sub.model.dao.DAOFactory;
import co.gov.medellin.ssti.sub.model.dao.IGrupoFamiliarDAO;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;

public class GrupoFamiliarService {
	/**
	 * Metodo que inserta en la tabla TCS_BEN_GRUPO_FAMILIAR un nuevo grupo
	 * familiar.
	 * 
	 * @param codeCabeza
	 *            Codigo del beneficiario que es cabeza del grupo familiar
	 *            (BEN_CODIGO).
	 * @param nombre
	 *            Nombre del grupo familiar. numero_identificacion_cabeza, al
	 *            que se le concatena al principio GF-. Ej con codeCabeza
	 *            71389780 quedaria: GF-71389780.
	 * @param codeParentezco
	 *            Codigo del parentezco (VFL_CODIGO_PARENTESCO).
	 * @param user
	 *            Usuario que realiza el insert.
	 * @param terminal
	 *            Terminal desde donde se realiza el insert.
	 * @param fecha
	 *            Fecha en la que se realiza el insert.
	 * @return
	 * @throws SQLException
	 */
	public String[] insert(Long codeCabeza, String nombre, Long codeParentezco,
			String user, String terminal, String fecha) throws DAOException {
		IGrupoFamiliarDAO grupoFamiliarDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			grupoFamiliarDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getGrupoFamiliarDAO(con);
			return grupoFamiliarDAO.insert(codeCabeza, nombre, codeParentezco,
					user, terminal, fecha);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (grupoFamiliarDAO != null) {
				if (!grupoFamiliarDAO.isConnClosed()) {
					grupoFamiliarDAO.close();
				}
			}
		}
	}

	/**
	 * Metodo que consulta el codigo maximo en la tabla TCS_BEN_GRUPO_FAMILIAR.
	 * 
	 * @return MAX(CODIGO) de TCS_BEN_GRUPO_FAMILIAR.
	 * @throws SQLException
	 */
	public Long findMaxCode() throws DAOException {
		IGrupoFamiliarDAO grupoFamiliarDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			grupoFamiliarDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getGrupoFamiliarDAO(con);
			return grupoFamiliarDAO.findMaxCode();
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (grupoFamiliarDAO != null) {
				if (!grupoFamiliarDAO.isConnClosed()) {
					grupoFamiliarDAO.close();
				}
			}
		}
	}

	/**
	 * Metodo que inserta en TCS_BEN_BENEF_GRUPO_FAMILIAR un registro para el
	 * beneficiario.
	 * 
	 * @param codeBeneficiario
	 *            Codigo del beneficiario.
	 * @param codeGF
	 *            Codigo del grupo familiar.
	 * @param codeParentezco
	 *            Codigo de parentezco.
	 * @param user
	 *            Usuario que realiza la operacion.
	 * @param terminal
	 *            Terminal desde donde se realiza la operacion.
	 * @param fecha
	 *            Fecha en la que se realiza la operacion.
	 * @return true si se asigna.
	 * @throws SQLException
	 */
	public boolean asignarBeneficiarioAGrupoFamiliar(Long codeBeneficiario,
			Long codeGF, Long codeParentezco, String user, String terminal,
			String fecha) throws DAOException {
		IGrupoFamiliarDAO grupoFamiliarDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			grupoFamiliarDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getGrupoFamiliarDAO(con);
			return grupoFamiliarDAO.asignarBeneficiarioAGrupoFamiliar(
					codeBeneficiario, codeGF, codeParentezco, user, terminal,
					fecha);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (grupoFamiliarDAO != null) {
				if (!grupoFamiliarDAO.isConnClosed()) {
					grupoFamiliarDAO.close();
				}
			}
		}
	}
}
